package com.xiaoxi.xirpc.proxy;

import com.xiaoxi.xirpc.RpcApplication;

import java.lang.reflect.Proxy;

/**
 *  服务代理工厂
 */
public class ServiceProxyFactory {

    /**
     *  根据服务类型获取代理对象
     * @param serviceClass
     * @return
     * @param <T>
     */
    public static <T> T getProxy(Class<T> serviceClass){
        // 判断是否开启mock配置
        if (RpcApplication.getRpcConfig().getMock()){
            return getMockProxy(serviceClass);
        }
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[]{serviceClass},
                new ServiceProxy());
    }

    /**
     *  根据服务类型获取Mock代理对象
     * @param serviceClass
     * @return
     * @param <T>
     */
    public static <T> T getMockProxy(Class<T> serviceClass){
        return (T) Proxy.newProxyInstance(
                serviceClass.getClassLoader(),
                new Class[]{serviceClass},
                new MockServiceProxy());
    }
}
